<html>
 <head>
  <meta charset="UTF-8">
 </head>
 <body>
  <h1 data-lake-id="W7pDZ" id="W7pDZ"><span data-lake-id="ub68ac614" id="ub68ac614">典型回答</span></h1>
  <p data-lake-id="u2b18e0e8" id="u2b18e0e8"><br></p>
  <p data-lake-id="ue41d3e93" id="ue41d3e93"><span data-lake-id="ufd0b2a44" id="ufd0b2a44">MyBatis的RowBounds是一个用于分页查询的简单POJO类，它包含两个属性offset和limit，分别表示分页查询的偏移量和每页查询的数据条数。</span></p>
  <p data-lake-id="u1a722bd0" id="u1a722bd0"><span data-lake-id="u62679edf" id="u62679edf">​</span><br></p>
  <p data-lake-id="uac31f280" id="uac31f280"><strong><span data-lake-id="u59e3d083" id="u59e3d083">在使用RowBounds进行逻辑分页的时候，我们的SQL语句中是不需要指定分页参数的。</span></strong><span data-lake-id="u4217ba7f" id="u4217ba7f">就正常的查询即可，如：</span></p>
  <p data-lake-id="uf6ea214f" id="uf6ea214f"><span data-lake-id="uceb9aaa4" id="uceb9aaa4">​</span><br></p>
  <pre lang="java"><code>
&lt;select id="getUsers" resultType="User"&gt;
    select * from user
    &lt;where&gt;
        &lt;if test="name != null"&gt;
            and name like CONCAT('%',#{name},'%')
        &lt;/if&gt;
    &lt;/where&gt;
		order by id
&lt;/select&gt;
</code></pre>
  <p data-lake-id="uaf2252bd" id="uaf2252bd"><span data-lake-id="ue2bb07e8" id="ue2bb07e8">​</span><br></p>
  <p data-lake-id="ue24278c9" id="ue24278c9"><span data-lake-id="u69105b65" id="u69105b65">然后，在查询的时候，将RowBounds当做一个参数传递：</span></p>
  <p data-lake-id="u032e196f" id="u032e196f"><br></p>
  <pre lang="java"><code>
int offset = 10; // 偏移量
int limit = 5; // 每页数据条数
RowBounds rowBounds = new RowBounds(offset, limit);
List&lt;User&gt; userList = sqlSession.selectList("getUserList", null, rowBounds);
</code></pre>
  <p data-lake-id="u0914f143" id="u0914f143"><br></p>
  <p data-lake-id="u411b7ab8" id="u411b7ab8"><span data-lake-id="u790d8c21" id="u790d8c21">这样，实际上在查询的时候，将会先所有符合条件的记录返回，然后再在内存中进行分页，分页的方式是根据RowBounds中指定的offset和limit进行数据保留，即抛弃掉不需要的数据再返回。</span></p>
 </body>
</html>